import router from '@/router'
import store from '@/store'
import axios from 'axios'

const http = axios.create({
  // 常见的一些配置 ：baseURL  timeout
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net/',
  timeout: 5000
})

// 请求拦截器
http.interceptors.request.use(config => {
  // 如果本地有token就携带在请求头中
  const { profile } = store.state.user
  if (profile.token) {
    config.headers.Authorization = `Bearer ${profile.token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器
http.interceptors.response.use(res => res.data, error => {
  if (error.response && error.response.status === 401) {
    // 401身份未认证
    // 1.清空无效的用户信息
    store.commit('user/setUser', {})
    // 2.跳转登录页
    // 3.跳转需要传参（当前的路由地址），方便登录后回到当前页面
    const fullPath = encodeURIComponent(router.currentRoute.value.fullPath)
    router.push('/login?redirectUrl=' + fullPath)
  }
  return Promise.reject(error)
})

// 请求封装
// 导出自定义函数，参数对象结构赋值
export default ({ url, method = 'GET', params = {}, data = {}, headers = {} }) => {
  return http({
    url,
    method,
    params,
    data,
    headers
  })
}
